<?php
	
namespace Model;
//Klass som hanterar inloggningen.

class LoginHandler{	
	
	private $m_isloggedIn = 'isloggedIn';
	private $m_issuperuser = 'issuperuser';
	private $m_userLocation = 'userLocation';
	private $m_userIDLocation = 'userIDLocation';

	private $m_userid = "userid";
	private $m_username = "username";
	private $m_password = "password";
	private $m_superuser = "superuser";

	private $m_db = null;
	
	public function __construct(Database $database){
		$this->m_db = $database;
	}

	/**
	 * Kontrollerar om användaren är inloggad
	 */
	public function IsLoggedIn(){
		return isset($_SESSION[$this->m_isloggedIn]);		
	}

	/**
	 * Kontrollerar om användaren är superuser
	 */
	public function IsSuperUser(){
		return isset($_SESSION[$this->m_issuperuser]);		
	}
	
	/**
	 * Kontrollerar mot databasen om användarnamn och lösenord stämmer
	 * @param string $username det inskrivna användarnamnet
	 * @param string $password det inskrivna lösenorder
	 */
	public function DoLogin($username, $password){
					
		$sql = 'SELECT * FROM login WHERE username = ? and password = ?';

		$ret;
		$user = false;
		
		$stmt = $this->m_db->Prepare($sql);

		$stmt->bind_param('ss', $username, $password);
		
		if($this->m_db->Execute($stmt) == false){
			return false;
		}
		
		// Binder resultatet i en array
        if ($stmt->bind_result($ret[$this->m_userid], $ret[$this->m_username], $ret[$this->m_password], $ret[$this->m_superuser]) == false) {
            throw new \Exception($this->mysqli->error);
        }

		/** Kontrollerar om de inskickade uppgifterna stämmer överrens med de som finns i databasen
		 * 	returnerar isåfall true för att indikera att inloggningen gick bra
		 */
        if($stmt->fetch()){
        	$user = new \Model\User($ret[$this->m_userid], $ret[$this->m_username], $ret[$this->m_password], $ret[$this->m_superuser]);        	
        }

		// Om inget objekt har returnerats har inloggningen misslyckats
		if($user != false){
			$_SESSION[$this->m_isloggedIn] = true;	
			$_SESSION[$this->m_userLocation] = $user->GetUsername();

			$_SESSION[$this->m_userIDLocation] = $user->GetId();

			// Om getSuperUser() är true har användaren mer rättigheter
			if($user->GetSuperUser() == true){
				$_SESSION[$this->m_issuperuser] = true;
			}
			return true;
		}		
		return false;		
	}
	
	/**
	 * Kontrollerar om det finns en session och nollställer isåfall sessionen. Användaren blir utloggad
	 */
	public function DoLogout(){
		if(isset($_SESSION[$this->m_isloggedIn])){
			unset($_SESSION[$this->m_isloggedIn]);
			unset($_SESSION[$this->m_issuperuser]);
			unset($_SESSION[$this->m_userLocation]);
		}
	}	

	/**
	 * Hämtar ut namnet på den aktuella användaren
	 */
	public function GetCurrentUsername()
	{			
		if(isset($_SESSION[$this->m_userLocation])){
			return $_SESSION[$this->m_userLocation];
		}
	}	

	/**
	 * Hämtar ut id på den aktuella användaren
	 */
	public function GetCurrentUserId()
	{			
		if(isset($_SESSION[$this->m_userIDLocation])){
			return $_SESSION[$this->m_userIDLocation];
		}
	}	
}